package br.ucb.cesbdao.utilBeans;

import java.util.ArrayList;
import java.util.Date;

import javax.swing.JTable;

import br.ucb.cesbdao.enuns.EnumMensagens;
import br.ucb.cesbdao.model.TipoAtendimentoDoAtendimentoModel;
import br.ucb.cesbdao.model.TipoAtendimentoModel;
import br.ucb.cesbdao.model.impl.TipoAtendimentoDoAtendimentoModelImpl;
import br.ucb.cesbdao.model.impl.TipoAtendimentoModelImpl;
import br.ucb.cesbdao.modeloTabelas.ModeloTabelaTipoAtendimento;
import br.ucb.cesbdao.relatoriosDTO.TipoAtendeDTO;
import br.ucb.cesbdao.relatoriosDTO.TipoAtendedimentoDTO;
import br.ucb.cesbdao.servicos.DateUtil;
import br.ucb.cesbdao.servicos.Servicos;
import br.ucb.cesbdao.visao.Visao;

public class TipoAtendimentoUtil {
	public static void cadastraAtendimento(String descricao) {
		if(descricao.isEmpty()){
			Visao.showMessageError(EnumMensagens.MSG_ALERTA_TPATENDIMETNO.getMensagem(),"Erro");
			return;
		}
		TipoAtendimentoModel model = new TipoAtendimentoModelImpl();
		model.addAtendimento(descricao);
	}

	public static void editarTipo(JTable jtTipoAtend,
			ModeloTabelaTipoAtendimento modeloTabelaTipoAtendimento){

		String tipo = Servicos.getString("Editar Tipo de Atendimento","Editar",modeloTabelaTipoAtendimento.getTipoAtendimento(jtTipoAtend.getSelectedRow()).getDescricao());
		if(tipo == null)
			return; 
		TipoAtendimentoModel model = new TipoAtendimentoModelImpl();
		model.upAtendimento(tipo,modeloTabelaTipoAtendimento.getTipoAtendimento(jtTipoAtend.getSelectedRow()).getIdTipoAtende());
	}
	
	public static void dell(JTable jtTipoAtend,ModeloTabelaTipoAtendimento modeloTabelaTipoAtendimento) {
		TipoAtendimentoModel model = new TipoAtendimentoModelImpl();
		TipoAtendimentoDoAtendimentoModel modelRelacional = new TipoAtendimentoDoAtendimentoModelImpl();
		if(jtTipoAtend.getSelectedRow() < 0){
			Visao.showMessageWarning(EnumMensagens.MSG_ALERTA_TPA_N_SELECIONADO.getMensagem(), "Aviso do sistema");
			return;
		}
		if(!Visao.showYesNo(EnumMensagens.MSG_Q_CONFIRMACAO_DELETAR_TPA.getMensagem(),"Confirmação"))
			return;
		modelRelacional.DellByIdTipo(modeloTabelaTipoAtendimento.getTipoAtendimento(jtTipoAtend.getSelectedRow()).getIdTipoAtende());
		model.delAtendimento(modeloTabelaTipoAtendimento.getTipoAtendimento(jtTipoAtend.getSelectedRow()).getIdTipoAtende());
	}

	public static void add(){
		TipoAtendimentoModel model = new TipoAtendimentoModelImpl();
		String tipo = Servicos.getString("Novo tipo de atendimento","Novo Tipo");
		if(tipo == null)
			return;
		model.addAtendimento(tipo);
	}

	public static ArrayList<TipoAtendedimentoDTO> pegaDTO(ArrayList<TipoAtendeDTO> tipoAtendimentoRls) {

		ArrayList<TipoAtendedimentoDTO> tos = new ArrayList<TipoAtendedimentoDTO>();		
		for (TipoAtendeDTO tipoAtendeRl : tipoAtendimentoRls) {
			TipoAtendedimentoDTO eto = converteRlTo(tipoAtendeRl);

			if(tos.contains(eto))
				tos = combinar(eto,tos);
			else
				tos.add(eto);
		}
		return tos;
	}

	private static ArrayList<TipoAtendedimentoDTO> combinar(
			TipoAtendedimentoDTO eto, ArrayList<TipoAtendedimentoDTO> tos) {

		ArrayList<TipoAtendedimentoDTO> tipoAtendeTOs = new ArrayList<TipoAtendedimentoDTO>(tos);

		for (TipoAtendedimentoDTO tipoAtendeTO : tos) {
			if(tipoAtendeTO.equals(eto)){
				TipoAtendedimentoDTO soma = soma(tipoAtendeTO,eto);
				tipoAtendeTOs.remove(tipoAtendeTO);
				tipoAtendeTOs.add(soma);
			}
		}
		return tipoAtendeTOs;
	}

	private static TipoAtendedimentoDTO soma(TipoAtendedimentoDTO tipoAtendeTO,TipoAtendedimentoDTO eto) {
		return new TipoAtendedimentoDTO(eto.getDescricao(),
				tipoAtendeTO.getJan()+eto.getJan() ,
				tipoAtendeTO.getFev()+eto.getFev() ,
				tipoAtendeTO.getMar()+eto.getMar() ,
				tipoAtendeTO.getAbr()+eto.getAbr() ,
				tipoAtendeTO.getMai()+eto.getMai() ,
				tipoAtendeTO.getJun()+eto.getJun() ,
				tipoAtendeTO.getJul()+eto.getJul() ,
				tipoAtendeTO.getAgo()+eto.getAgo() ,
				tipoAtendeTO.getSet()+eto.getSet() ,
				tipoAtendeTO.getOut()+eto.getOut() ,
				tipoAtendeTO.getNov()+eto.getNov() ,
				tipoAtendeTO.getDez()+eto.getDez()
				);
	}

	private static TipoAtendedimentoDTO converteRlTo(TipoAtendeDTO tipoAtendeRl) {
		Date data = DateUtil.parseData(DateUtil.formatDateOut(tipoAtendeRl.getData()));
		TipoAtendedimentoDTO tipoAtenidmentoTO = new TipoAtendedimentoDTO();
		tipoAtenidmentoTO.setDescricao(tipoAtendeRl.getDescricao());
		
		switch (DateUtil.getMes(data)) {
		case 1:
			tipoAtenidmentoTO.setJan(tipoAtendeRl.getQuant());
			break;
		case 2:
			tipoAtenidmentoTO.setFev(tipoAtendeRl.getQuant());
			break;
		case 3:
			tipoAtenidmentoTO.setMar(tipoAtendeRl.getQuant());
			break;
		case 4:
			tipoAtenidmentoTO.setAbr(tipoAtendeRl.getQuant());
			break;
		case 5:
			tipoAtenidmentoTO.setMai(tipoAtendeRl.getQuant());
			break;
		case 6:
			tipoAtenidmentoTO.setJun(tipoAtendeRl.getQuant());
			break;
		case 7:
			tipoAtenidmentoTO.setJul(tipoAtendeRl.getQuant());
			break;
		case 8:
			tipoAtenidmentoTO.setAgo(tipoAtendeRl.getQuant());
			break;
		case 9:
			tipoAtenidmentoTO.setSet(tipoAtendeRl.getQuant());
			break;
		case 10:
			tipoAtenidmentoTO.setOut(tipoAtendeRl.getQuant());
			break;
		case 11:
			tipoAtenidmentoTO.setNov(tipoAtendeRl.getQuant());
			break;
		case 12:
			tipoAtenidmentoTO.setDez(tipoAtendeRl.getQuant());
		}
		
		return tipoAtenidmentoTO;
	}

}
